perm filename PIXNIC.SAI[VIS,HPM]4 blob
sn#144762 filedate 1975-02-11 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 REQUIRE "PIXSUB.REL[VIS,HPM]" LOAD_MODULE
C00013 ENDMK
C⊗;
REQUIRE "PIXSUB.REL[VIS,HPM]" LOAD_MODULE;
REQUIRE "TVSIX.REL[1,PDQ]" LOAD_MODULE;
EXTERNAL PROCEDURE MAKTAB(REFERENCE INTEGER PICTURE);
EXTERNAL INTEGER PROCEDURE PIXEL(REFERENCE INTEGER PIX; INTEGER I,J);
EXTERNAL PROCEDURE PUTEL(REFERENCE INTEGER PIX; INTEGER I,J,VALUE);
INTEGER PROCEDURE PFLDIM(STRING FILNAM);
comment returns the size of the picture FILNAM on disk.
used for allocating arrays in preparation for
actually reading them. Returns 0 on failure.;
BEGIN
INTEGER XXCOUNT,XXBRCHAR,XXEOF,XXPICLOC; BOOLEAN XXFLAG;
INTEGER PCLN,PCWD,PCBY,PCBYA,LNWD,LNBY,LNBYA,WDBY,WDBI,BYBI;
INTEGER ARRAY BUF[0:'177];
OPEN(10,"DSK",'10,2,0,XXCOUNT,XXBRCHAR,XXEOF);
LOOKUP(10,FILNAM,XXFLAG);
IF XXFLAG THEN
BEGIN
CLOSE(10);
RETURN(0);
END
ELSE
BEGIN
ARRYIN(10,BUF[0],'200); CLOSE(10);
IF BUF[0]≠-1 ∨ BUF[7]=0 THEN RETURN(0);
BYBI←BUF[1];
LNBY←BUF[6]-BUF[5]+1;
PCLN←BUF[4]-BUF[3]+1;
LNWD←BUF[2];
LNBYA←LNWD*(36%BYBI);
PCWD←LNWD*PCLN;
XXPICLOC←(BUF[7] LAND '777777)-'200;
RETURN(12+PCLN+LNBYA+PCWD);
END;
END;
INTEGER PROCEDURE GETPFL(STRING FILNAM; REFERENCE INTEGER PICTURE);
comment read the picture in file FILNAM into area of core whose first
word is PICTURE. PFLDIM(FILNAM) words are needed.
Returns picture size of success, 0 on failure.;
BEGIN
INTEGER XXCOUNT,XXBRCHAR,XXEOF,XXPICLOC; BOOLEAN XXFLAG;
INTEGER PCLN,PCWD,PCBY,PCBYA,LNWD,LNBY,LNBYA,WDBY,WDBI,BYBI;
INTEGER I,L;
INTEGER ARRAY BUF[0:'177];
OPEN(10,"DSK",'10,2,0,XXCOUNT,XXBRCHAR,XXEOF);
LOOKUP(10,FILNAM,XXFLAG);
IF XXFLAG THEN
BEGIN
CLOSE(10);
RETURN(0);
END
ELSE
BEGIN
ARRYIN(10,BUF[0],'200);
IF BUF[0]≠-1 ∨ BUF[7]=0 THEN RETURN(0);
L←LOCATION(PICTURE);
MEMORY[L+9]←BYBI←BUF[1];
MEMORY[L+5]←LNBY←BUF[6]-BUF[5]+1;
MEMORY[L+0]←PCLN←BUF[4]-BUF[3]+1;
MEMORY[L+4]←LNWD←BUF[2];
MEMORY[L+7]←WDBY←36%BYBI;
MEMORY[L+6]←LNBYA←LNWD*WDBY;
MEMORY[L+1]←PCWD←PCLN*LNWD;
MEMORY[L+2]←PCBY←PCLN*LNBY;
MEMORY[L+3]←PCBYA←PCLN*LNBYA;
MEMORY[L+8]←WDBI←WDBY*BYBI;
MEMORY[L+10]←12+PCLN+L;
MAKTAB(PICTURE);
XXPICLOC←(BUF[7] LAND '777777)-'200;
FOR I←1 STEP 1 UNTIL XXPICLOC DO WORDIN(10);
ARRYIN(10,MEMORY[L+12+PCLN+LNBYA],PCWD);
CLOSE(10);
RETURN(12+PCLN+LNBYA+PCWD);
END;
END;
INTEGER PROCEDURE PIXDIM(INTEGER HEIGHT,WIDTH,BITS);
comment returns the size of the array needed to hold a hypothetical
picture HEIGHT scanlines by WIDTH pixels per scanline
by BITS bits per pixel.;
BEGIN
INTEGER PCLN,PCWD,PCBY,PCBYA,LNWD,LNBY,LNBYA,WDBY,WDBI,BYBI;
INTEGER L;
BYBI←BITS;
LNBY←WIDTH;
PCLN←HEIGHT;
WDBY←36%BYBI;
LNWD←(LNBY+WDBY-1)%WDBY;
LNBYA←LNWD*WDBY;
PCWD←PCLN*LNWD;
RETURN(12+PCLN+LNBYA+PCWD);
END;
INTEGER PROCEDURE MAKPIX(INTEGER HEIGHT,WIDTH,BITS; REFERENCE INTEGER PICTURE);
comment actually creates an empty picture HEIGHT by WIDTH by BITS in
the area of core beginning with PICTURE. Returns its size.;
BEGIN
INTEGER PCLN,PCWD,PCBY,PCBYA,LNWD,LNBY,LNBYA,WDBY,WDBI,BYBI;
INTEGER I,L;
L←LOCATION(PICTURE);
MEMORY[L+9]←BYBI←BITS;
MEMORY[L+5]←LNBY←WIDTH;
MEMORY[L+0]←PCLN←HEIGHT;
MEMORY[L+7]←WDBY←36%BYBI;
MEMORY[L+4]←LNWD←(LNBY+WDBY-1)%WDBY;
MEMORY[L+6]←LNBYA←LNWD*WDBY;
MEMORY[L+1]←PCWD←PCLN*LNWD;
MEMORY[L+2]←PCBY←PCLN*LNBY;
MEMORY[L+3]←PCBYA←PCLN*LNBYA;
MEMORY[L+8]←WDBI←WDBY*BYBI;
MEMORY[L+10]←12+PCLN+L;
MAKTAB(PICTURE);
RETURN(12+PCLN+LNBYA+PCWD);
END;
INTEGER PROCEDURE PUTPFL(REFERENCE INTEGER PICTURE; STRING FILNAM);
comment write out the picture in the core area starting with
PICTURE, creating a file called FILNAM. Returns
the size of the original file on success, else 0.;
BEGIN
INTEGER XXCOUNT,XXBRCHAR,XXEOF,XXPICLOC; BOOLEAN XXFLAG;
INTEGER PCLN,PCWD,PCBY,PCBYA,LNWD,LNBY,LNBYA,WDBY,WDBI,BYBI;
INTEGER I,L;
INTEGER ARRAY BUF[0:'177];
OPEN(10,"DSK",'10,0,2,XXCOUNT,XXBRCHAR,XXEOF);
ENTER(10,FILNAM,XXFLAG);
IF XXFLAG THEN
BEGIN
CLOSE(10);
RETURN(0);
END
ELSE
BEGIN
L←LOCATION(PICTURE);
BUF[0]←-1;
BUF[1]←BYBI←MEMORY[L+9];
BUF[2]←LNWD←MEMORY[L+4];
BUF[3]←1; BUF[4]←PCLN←MEMORY[L+0];
BUF[5]←1; BUF[6]←LNBY←MEMORY[L+5];
BUF[7]←((-(PCWD←MEMORY[L+1])) LSH 18) LOR '200;
WDBY←36%BYBI;
LNWD←(LNBY+WDBY-1)%WDBY;
LNBYA←LNWD*WDBY;
ARRYOUT(10,BUF[0],'200);
ARRYOUT(10,MEMORY[L+12+PCLN+LNBYA],PCWD);
CLOSE(10);
RETURN(12+PCLN+LNBYA+PCWD);
END;
END;
INTEGER PROCEDURE CAMPIX(INTEGER CAM,XEDGE,YEDGE,SUMS,CLPINC;
REFERENCE INTEGER PICTURE);
comment read a picture from camera CAM of size defined by array PICTURE
the area of core beginning with PICTURE. Upper left hand
corner is at PICX,PICY. SUMS and CLPINC are averaging params.;
BEGIN
INTEGER PCLN,PCWD,PCBY,PCBYA,LNWD,LNBY,LNBYA,WDBY,WDBI,BYBI;
INTEGER L;
INTEGER ARRAY PIC[0:15];
EXTERNAL PROCEDURE TVSIX(INTEGER ARRAY PARS; INTEGER SUMS,CLPINC);
EXTERNAL PROCEDURE PICREL(INTEGER ARRAY PIC);
EXTERNAL INTEGER ERROR,TVCAM;
DEFINE SCALEX="0",SCALEY="1",POSX="2",POSY="3",SIZEX="4",SIZEY="5",
SIZEL="6",PTR="7",NAME="8",BIT="9",GAIN="10",OFFSET="11";
comment for interfacing quam internal format;
PIC[POSX]←XEDGE; PIC[POSY]←YEDGE;
L←LOCATION(PICTURE);
PIC[BIT]←MEMORY[L+9];
PIC[SIZEX]←MEMORY[L+5];
PIC[SIZEY]←PCLN←MEMORY[L+0];
PIC[SIZEL]←MEMORY[L+4];
PCWD←MEMORY[L+1];
LNBYA←MEMORY[L+6];
ERROR←1; TVCAM←CAM;
TVSIX(PIC,SUMS,CLPINC);
ARRBLT(MEMORY[MEMORY[L+11]],MEMORY[PIC[PTR] LAND '777777],PCWD);
PICREL(PIC);
RETURN(12+PCLN+LNBYA+PCWD);
END;
DEFINE PCLN=0; comment index of word in a picture file containing
number of scanlines in the picture.
DEFINE PCWD=1; comment number of words in the picture;
DEFINE PCBY=2; comment number of valid bytes in the picture;
DEFINE PCBYA=3; comment no. of bytes including the nulls at the end of lines;
DEFINE LNWD=4; comment no. of words per scanline;
DEFINE LNBY=5; comment no. of valid bytes per scanline;
DEFINE LNBYA=6; comment no. of bytes per scanline, including the nulls;
DEFINE WDBY=7; comment no. of bytes per word;
DEFINE WDBI=8; comment no. of bits containing data in a word;
DEFINE BYBI=9; comment no. of bits per byte;
DEFINE BPTAB=10; comment address of second entry in byte pntr. table;
DEFINE LINTAB=11; comment actual address of the first entry in the row table;